¿Qué significa "Los operadores devuelven valores" en la programación? Quiero decir, toma el operador +. Si tenemos 2 números (no cadenas) como operandos, suma los operandos juntos. Pero, ¿qué significa que devuelve un valor? ¿No se supone que solo se suman dos números juntos?
Realmente no entiendo qué significa este "retorno", el valor se devuelve a... ¿quién/qué/dónde?
el valor se devuelve a... ¿quién/qué/dónde?
A lo que evaluó la expresión, o dicho de otro modo, a lo que quiso que el intérprete evaluara la expresión. Al igual que una función devuelve un valor a quien la llama, el intérprete devuelve el resultado de la evaluación. No lo pienses demasiado.
Piense en ello en términos de hablar. Cuando hables, puedes hacer una declaración, como: "Tengo hambre". Esto no requeriría una "respuesta" de la otra persona en la conversación, pero si dijera "¿Tienes hambre?", esperaría una respuesta.
En otras palabras, a veces las declaraciones que escribe son solo instrucciones a seguir que no dan como resultado ninguna "respuesta" del sistema, pero otras sí y esas respuestas son lo que llamamos el "valor de retorno" de la declaración.
Entonces, 1 + 1 es algo que devuelve un valor: el sistema ejecutará el comando y el resultado será un nuevo valor. Ese nuevo valor es el valor de retorno. Ahora, necesita saber qué tipos de declaraciones devuelven valores y cuáles no, para que pueda decidir si desea capturar ese valor devuelto y/o hacer algo con él.
1 + 1 // 2 will be returned from this, but the code doesn't capture it foo = 1 + 1 // Now the 2 will be returned and captured for future use by the program Pero, console.log("Hello") es una instrucción que se llevará a cabo y no se generará ninguna respuesta (valor de retorno). Entonces, no tendría ningún sentido escribir:
foo = console.log("Hello"); Debido a que no se devuelve nada de console.log() , foo terminaría siendo undefined aunque el mensaje aún se escribiría en la console .
De hecho, si no está seguro de si una declaración devolverá o no un valor, puede averiguarlo intentando asignar una variable al resultado y luego verificando la variable:
let foo = console.log("Hello"); // Hello console.log(foo); // undefined let bar = 1 + 1; console.log(bar); // 2 Como puede ver, cuando hay un valor de retorno, la declaración que lo causó es la declaración que decide si capturarlo o no; el valor de retorno se devuelve como resultado de la declaración. Entonces, como se discutió anteriormente en esta respuesta, la declaración 1+1 hará que el sistema haga los cálculos y devuelva la respuesta al contexto del código que generó la acción en primer lugar, pero esa declaración no está preparada para recibir la respuesta. y así la respuesta nunca se captura y, para todos los efectos, desaparece. Pero foo = 1 + 1 se prepara para el valor devuelto diciendo que foo debería almacenar o capturar el valor devuelto al ejecutar la instrucción 1+1 .